/**
 * 获取本周、本季度、本月、上月的开始日期、结束日期
 */
let now = new Date(); //当前日期
let nowDayOfWeek = now.getDay(); //今天本周的第几天
let nowDay = now.getDate(); //当前日
let nowMonth = now.getMonth(); //当前月
let nowYear = now.getYear(); //当前年
nowYear += (nowYear < 2000) ? 1900 : 0; //
let lastMonthDate = new Date(); //上月日期
lastMonthDate.setDate(1);
lastMonthDate.setMonth(lastMonthDate.getMonth() - 1);
let lastYear = lastMonthDate.getYear();
let lastMonth = lastMonthDate.getMonth();
//格式化日期：yyyy-MM-dd
function formatDate(date) {
  let myyear = date.getFullYear();
  let mymonth = date.getMonth() + 1;
  let myweekday = date.getDate();
  if (mymonth < 10) {
    mymonth = "0" + mymonth;
  }
  if (myweekday < 10) {
    myweekday = "0" + myweekday;
  }
  return (myyear + "-" + mymonth + "-" + myweekday);
}
// 获取某天昨天的日期
function formatYesterday(date = new Date()) {
  let yesterday_milliseconds = date.getTime() - 1000 * 60 * 60 * 24;
  let yesterday = new Date();
  yesterday.setTime(yesterday_milliseconds);

  let strYear = yesterday.getFullYear();
  let strMonth = yesterday.getMonth() + 1;
  let strDay = yesterday.getDate();
  if (strMonth < 10) {
    strMonth = "0" + strMonth;
  }
  if (strDay < 10) {
    strDay = "0" + strDay;
  }
  let datastr = `${strYear}-${strMonth}-${strDay}`;
  return datastr;
}
//获得某月的天数
function getMonthDays(myMonth) {
  let monthStartDate = new Date(nowYear, myMonth, 1);
  let monthEndDate = new Date(nowYear, myMonth + 1, 1);
  let days = (monthEndDate - monthStartDate) / (1000 * 60 * 60 * 24);
  return days;
}
//获得本季度的开始月份
function getQuarterStartMonth() {
  let quarterStartMonth = 0;
  if (nowMonth < 3) {
    quarterStartMonth = 0;
  }
  if (2 < nowMonth && nowMonth < 6) {
    quarterStartMonth = 3;
  }
  if (5 < nowMonth && nowMonth < 9) {
    quarterStartMonth = 6;
  }
  if (nowMonth > 8) {
    quarterStartMonth = 9;
  }
  return quarterStartMonth;
}
//获得本周的开始日期(周日开始)
function getWeekStartDate() {
  let weekStartDate = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek);
  return formatDate(weekStartDate);
}
//获得本周的开始日期(周一开始)
function _getWeekStartDate() {
  let weekStartDate = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek + 1);
  return formatDate(weekStartDate);
}
//获得本周的结束日期(周六结束)
function getWeekEndDate() {
  let weekEndDate = new Date(nowYear, nowMonth, nowDay + (6 - nowDayOfWeek));
  return formatDate(weekEndDate);
}
//获得本周的结束日期(周日结束)
function _getWeekEndDate() {
  let weekEndDate = new Date(nowYear, nowMonth, nowDay + (6 - nowDayOfWeek) + 1);
  return formatDate(weekEndDate);
}
//获得上周的开始日期(周日开始)
function getLastWeekStartDate() {
  let weekStartDate = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek - 7);
  return formatDate(weekStartDate);
}
//获得上周的开始日期(周一开始)
function _getLastWeekStartDate() {
  let weekStartDate = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek - 6);
  return formatDate(weekStartDate);
}
//获得上周的结束日期(周六结束)
function getLastWeekEndDate() {
  let weekEndDate = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek - 1);
  return formatDate(weekEndDate);
}
//获得上周的结束日期(周日结束)
function _getLastWeekEndDate() {
  let weekEndDate = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek);
  return formatDate(weekEndDate);
}
//获得本月的开始日期
function getMonthStartDate() {
  let monthStartDate = new Date(nowYear, nowMonth, 1);
  return formatDate(monthStartDate);
}
//获得本月的结束日期
function getMonthEndDate() {
  let monthEndDate = new Date(nowYear, nowMonth, getMonthDays(nowMonth));
  return formatDate(monthEndDate);
}
//获得上月开始时间
function getLastMonthStartDate() {
  let computYear = nowYear
  if (lastMonth == 11) {
    computYear = computYear - 1
  }
  let lastMonthStartDate = new Date(computYear, lastMonth, 1);
  return formatDate(lastMonthStartDate);
}
//获得上月结束时间
function getLastMonthEndDate() {
  let computYear = nowYear
  if (lastMonth == 11) {
    computYear = computYear - 1
  }
  let lastMonthEndDate = new Date(computYear, lastMonth, getMonthDays(lastMonth));
  return formatDate(lastMonthEndDate);
}
//获得本季度的开始日期
function getQuarterStartDate() {
  let quarterStartDate = new Date(nowYear, getQuarterStartMonth(), 1);
  return formatDate(quarterStartDate);
}
//或的本季度的结束日期
function getQuarterEndDate() {
  let quarterEndMonth = getQuarterStartMonth() + 2;
  let quarterStartDate = new Date(nowYear, quarterEndMonth,
    getMonthDays(quarterEndMonth));
  return formatDate(quarterStartDate);
}
//获取当前日期yy-mm-dd
//date 为时间对象
function getDateStr3(date) {
  let year = "";
  let month = "";
  let day = "";
  let now = date;
  year = "" + now.getFullYear();
  if ((now.getMonth() + 1) < 10) {
    month = "0" + (now.getMonth() + 1);
  } else {
    month = "" + (now.getMonth() + 1);
  }
  if ((now.getDate()) < 10) {
    day = "0" + (now.getDate());
  } else {
    day = "" + (now.getDate());
  }
  return year + "-" + month + "-" + day;
}
/** 
* 获得相对当前周AddWeekCount个周的起止日期 
* AddWeekCount为0代表当前周  为-1代表上一个周  为1代表下一个周以此类推
* **/
function getWeekStartAndEnd(AddWeekCount) {
  //起止日期数组  
  let startStop = new Array();
  //一天的毫秒数  
  let millisecond = 1000 * 60 * 60 * 24;
  //获取当前时间  
  let currentDate = new Date();
  //相对于当前日期AddWeekCount个周的日期
  currentDate = new Date(currentDate.getTime() + (millisecond * 7 * AddWeekCount));
  //返回date是一周中的某一天
  let week = currentDate.getDay();
  //返回date是一个月中的某一天  
  let month = currentDate.getDate();
  //减去的天数  
  let minusDay = week != 0 ? week - 1 : 6;
  //获得当前周的第一天  
  let currentWeekFirstDay = new Date(currentDate.getTime() - (millisecond * minusDay));
  //获得当前周的最后一天
  let currentWeekLastDay = new Date(currentWeekFirstDay.getTime() + (millisecond * 6));
  //添加至数组  
  startStop.push(getDateStr3(currentWeekFirstDay));
  startStop.push(getDateStr3(currentWeekLastDay));

  return startStop;
}
/** 
* 获得相对当月AddMonthCount个月的起止日期 
* AddMonthCount为0 代表当月 为-1代表上一个月 为1代表下一个月 以此类推
* ***/
function getMonthStartAndEnd(AddMonthCount) {
  //起止日期数组  
  let startStop = new Array();
  //获取当前时间  
  let currentDate = new Date();
  let month = currentDate.getMonth() + AddMonthCount;
  if (month < 0) {
    var n = parseInt((-month) / 12);
    month += n * 12;
    currentDate.setFullYear(currentDate.getFullYear() - n);
  }
  currentDate = new Date(currentDate.setMonth(month));
  //获得当前月份0-11  
  let currentMonth = currentDate.getMonth();
  //获得当前年份4位年  
  let currentYear = currentDate.getFullYear();
  //获得上一个月的第一天  
  let currentMonthFirstDay = new Date(currentYear, currentMonth, 1);
  //获得上一月的最后一天  
  let currentMonthLastDay = new Date(currentYear, currentMonth + 1, 0);
  //添加至数组  
  startStop.push(getDateStr3(currentMonthFirstDay));
  startStop.push(getDateStr3(currentMonthLastDay));
  //返回  
  return startStop;
}
export {
  formatDate,
  formatYesterday,
  getMonthDays,
  getQuarterStartMonth,
  getWeekStartDate,
  getWeekEndDate,
  getLastWeekStartDate,
  getLastWeekEndDate,
  _getWeekStartDate,
  _getWeekEndDate,
  _getLastWeekStartDate,
  _getLastWeekEndDate,
  getMonthStartDate,
  getMonthEndDate,
  getLastMonthStartDate,
  getLastMonthEndDate,
  getQuarterStartDate,
  getQuarterEndDate,
  getDateStr3,
  getWeekStartAndEnd,
  getMonthStartAndEnd,
}